package com.fingard.dsp.bank.directbank.pab02;

import com.alibaba.fastjson.JSONObject;
import com.fingard.constant.Format;
import com.fingard.dsp.bank.directbank.PaymentState;
import com.fingard.dsp.bank.directbank.bankInterface.IBatPayRec;
import com.fingard.dsp.bank.directbank.pab02.Util.api.bean.FileMsgBean;
import com.fingard.dsp.bank.directbank.pab02.Util.api.utils.ScrtUtil;
import com.fingard.dsp.bank.reqrespobj.batpayrec.ReqBatPayRec;
import com.fingard.dsp.bank.reqrespobj.batpayrec.ReqQryBatPayRec;
import com.fingard.dsp.bank.reqrespobj.batpayrec.RetAtsBatPayRec;
import com.fingard.dsp.bank.reqrespobj.batpayrec.RetAtsQryBatPayRec;
import com.fingard.dsp.bank.reqrespobj.batpayrec.detail.RetAtsBatPayRecDetail;
import com.fingard.dsp.bank.reqrespobj.single.detail.ReqPayRecDetail;
import com.fingard.io.FileHelper;
import com.fingard.text.StringHelper;
import com.fingard.util.ZipHelper;

import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

/**
 * 平安银行 -跨行快付子平台
 * <p>
 * 参考文档：
 * 跨行快付子系统文件格式说明 .doc
 * 平安银行能力开放平台接口文.xlsx
 * 平安开放平台接入说明文档（java）V1.2.docx
 *
 * @author XueJy on 2019/2/14.
 * @version 1.0
 */


public class PAB02BatPayRec extends PAB02Base implements IBatPayRec {

    /**
     * 报盘文件规范
     * 编码GBK
     * 换行符  \r\n
     * 分隔符 “|::|”  如文件日期|::|业务码|::|单位协议号|::|上传文件名|::|总笔数|::|总金额|::|备注
     * 文件使用ZIP压缩
     * 报盘文件命名 KHKF_BIB_87_{MMDDHHMM}_{请求方单日不重复序号,长度由请求方自定,需要与通知消息中的文件序号一致[是否可带英文字母][不能]}.RQ.ZIP
     * 如：
     * KHKF_BIB_87_07071924_8720801722201011565795.RQ.ZIP
     */
    @Override
    public RetAtsBatPayRec d_1988_BatPay(ReqBatPayRec p_req1988) throws Exception {
        RetAtsBatPayRec retAts = new RetAtsBatPayRec(p_req1988.reqHeader);
        String reqBatchNo = p_req1988.reqBatchNO;
        retAts.reqSeqID = reqBatchNo;
        String transSeq = p_req1988.reqHeader.transSeqID;
        try {
            /*---------------------------------Step 1 配置参数校验------------------------------ */
            /*提交银行URl*/
            String serverUrl = bankFront.getUrl("TransUrl");
            /*获取tokenURl*/
            String getTokenUrl = bankFront.getUrl("GetTokenUrl");
            /*文件服务器 URl*/
            String fileUrl = bankFront.getUrl("FileServerUrl");
            /*用户uid*/
            String userid = getBankConfig().getMapValueByKey("bankparam", "Userid");
            /*开放平台门户申请的AppAccessKey*/
            String applicationID = getBankConfig().getMapValueByKey("bankparam", "ApplicationID");
            /*协议编号*/
            String agreeNo = getBankConfig().getMapValueByKey("agreeNo", p_req1988.ownAct);
            /*解压密码*/
            String unzipCode = getBankConfig().getMapValueByKey("bankparam", "UnZipCode");
            /*文件传输平台密码*/
            String passWord = getBankConfig().getMapValueByKey("bankparam", "PassWord");
            passWord = ScrtUtil.decryptEsb(passWord.substring(7));
            Map<String, String> map = new HashMap<String, String>();
            map.put("Userid", userid);
            map.put("TransUrl", serverUrl);
            map.put("GetTokenUrl", getTokenUrl);
            map.put("ApplicationID", applicationID);
            map.put("AgreeNo", agreeNo);
            map.put("FileServerUrl", fileUrl);
            /*验证配置参数是否都已配置*/
            if (!validateConfig(map, retAts)) {
                retAts.writeRetToATS();
                return retAts;
            }
            /*----------------------------------Step 2 上传交易文件------------------------------ */

            /*KHKF_BIB_87_{MMDDHHMM}_{请求方单日不重复序号,长度由请求方自定,需要与通知消息中的文件序号一致[是否可带英文字母][不能]}.RQ.ZIP*/
            String filename = "KHKF_BIB_87_" + Format.DateTimeWithoutYS.format(p_req1988.getPayDateTime()) + "_" + reqBatchNo + ".RQ";
            String trans8Date = Format.Date8Format.format(p_req1988.getPayDateOnly());
            StringBuilder fileMsg = new StringBuilder();
            /* 5、账号网点6、代收付类型7、代收付代码
            8、代收付协议校验标志9、文件日期10、文件序号11、上传文件名12、总笔数13、总金额14、币种15、凭证种类16、凭证号码17、备注 */
            String spliter = "|::|";
            /*1、业务代码*/
            fileMsg.append("100157").append(spliter);
            /*2、单位协议号*/
            fileMsg.append(agreeNo).append(spliter);
            /*3、委托单位签约账号*/
            fileMsg.append(p_req1988.ownAct).append(spliter);
            /*4、委托单位签约户名*/
            fileMsg.append(p_req1988.ownActName).append(spliter);
            /*5、账号网点*/
            fileMsg.append("").append(spliter);
            /*6、代收付类型*/
            fileMsg.append("2").append(spliter);
            /*7、代收付代码*/
            fileMsg.append("00000").append(spliter);
            /*8、代收付协议校验标志*/
            fileMsg.append("1").append(spliter);
            /*9、文件日期 yyyyMMdd*/
            fileMsg.append(trans8Date).append(spliter);
            /*10、文件序号*/
            fileMsg.append(reqBatchNo).append(spliter);
            /*11、上传文件名*/
            fileMsg.append(filename).append(spliter);
            /*12、总笔数*/
            fileMsg.append(p_req1988.totalNum).append(spliter);
            /*13、总金额*/
            fileMsg.append(p_req1988.totalAmt).append(spliter);
            /*14、币种*/
            fileMsg.append("RMB").append(spliter);
            /*15、凭证种类*/
            fileMsg.append("").append(spliter);
            /*16、凭证号码*/
            fileMsg.append("").append(spliter);
            /*17、备注*/
            fileMsg.append(p_req1988.useType);
            fileMsg.append("\r\n");
            while (p_req1988.readRecord()) {
                ReqPayRecDetail reqDetail = p_req1988.readedDetail;
                /*商户订单号 */
                fileMsg.append(reqDetail.askNumber).append(spliter);
                /*重发交易原商户订单号*/
                fileMsg.append("").append(spliter);
                /*账号网点  当银行账号内部户或者科目时必输，其他类型不允许录入网点号*/
                fileMsg.append("").append(spliter);
                /*对手银行账号 */
                fileMsg.append(reqDetail.recAct).append(spliter);
                /*有效期 */
                fileMsg.append("").append(spliter);
                /*户名 */
                fileMsg.append(reqDetail.recName).append(spliter);
                /*交易金额 单位元 。两位小数 */
                fileMsg.append(reqDetail.payAmount).append(spliter);
                /*开户银行*/
                fileMsg.append(reqDetail.cnapsCode).append(spliter);
                /*业务标识码*/
                fileMsg.append("").append(spliter);
                /*证件类型*/
                fileMsg.append("").append(spliter);
                /*证件号码*/
                fileMsg.append("").append(spliter);
                /*合同号*/
                fileMsg.append("").append(spliter);
                /*附言*/
                fileMsg.append(reqDetail.abstractATS + "+" + reqDetail.purpose).append(spliter);
                /*收款人账号开户行省*/
                fileMsg.append(reqDetail.getOppProvinceAndCity()[0]).append(spliter);
                /*收款人账号开户行市*/
                fileMsg.append(reqDetail.getOppProvinceAndCity()[1]).append(spliter);
                /*收款人账号开户行名称*/
                fileMsg.append(reqDetail.recBankName).append(spliter);
                /*单位结算卡完整账户名称 暂不支持*/
                fileMsg.append("").append(spliter);
                /*营业执照注册号 暂不支持*/
                fileMsg.append("");
                fileMsg.append("\r\n");
            }
            String filePath = getDataFileDirectory(p_req1988.getPayDateOnly()) + File.separator +"upload"+File.separator+ filename;
            /*写入文件*/
            try {
                FileHelper.writeFile(filePath, fileMsg.toString(), getCharset());
            } catch (Exception e) {
                WriteBankLogLn("写入【" + filePath + "】文件失败", e);
                retAts.respInfo = "压缩文件失败，请联系开发。";
                retAts.respCode = "0";
                retAts.transState = PaymentState.FAIL_Payment;
                retAts.writeRetToATS();
                return retAts;
            }
            String zipName = filePath + ".zip";
            /*压缩Zip文件*/
            try {
                ZipHelper.toZipWithPwd(new File(filePath), zipName, unzipCode, "UTF-8");
            } catch (Exception e) {
                WriteBankLogLn("压缩【" + zipName + "】文件失败", e);
                retAts.respInfo = "压缩文件失败，请联系开发。";
                retAts.respCode = "0";
                retAts.transState = PaymentState.FAIL_Payment;
                retAts.writeRetToATS();
                return retAts;
            }
            /*远程文件路径  /UID/FileName   */
            String remoteFile = "/" + userid + "/";
            File file = new File(zipName);
            if (file.exists()) {
                remoteFile += file.getName();
            }
            //发送文件包装类
            FileMsgBean bean = new FileMsgBean();
            /*将文件路径，发送地址等存入 FileMsgBean中， 调用银行提供的方法发送文件。*/
            bean.setUid(userid);
            bean.setPasswd(passWord);
            bean.setAppID(applicationID);
            String[] token = getToken(applicationID);
            if (token[0].length() > 0) {
                retAts.respInfo = "获取token失败，原因：" + token[1];
                retAts.respCode = "0";
                retAts.transState = PaymentState.FAIL_Payment;
                retAts.writeRetToATS();
                return retAts;

            }

            bean.setToken(token[1]);
            bean.setLocalPath(zipName);
            bean.setRemotePath(remoteFile);
            bean.setFileServerUrl(fileUrl);
            /*开始上传文件 */
            String[] tmpRet = putFileToServer(bean);
            boolean isOk = true;
            if (tmpRet[0].length() != 0) {
                if (tmpRet[1].startsWith("EFS0052")) {
                    String tokenPath = getCfgDirectory() + File.separator + applicationID + ".txt";
                    FileHelper.deleteFileIfExists(tokenPath);
                    bean.setToken(getToken(applicationID)[1]);
                    tmpRet = putFileToServer(bean);
                    if (tmpRet[0].length() != 0) {
                        isOk = false;
                    }
                } else {
                    isOk = false;
                }
            }
            if (!isOk) {
                retAts.respInfo = "报盘文件上传失败";
                retAts.respCode = "0";
                retAts.transState = PaymentState.FAIL_Payment;
                WriteBankLogLn("报盘文件上传失败，原因为：" + tmpRet[1]);
                retAts.writeRetToATS();
                return retAts;
            }

            /*--------------------------Step3 发送json通知银行处理文件--------------------------- */
            Map<String, Object> tmpMsg = new TreeMap<String, Object>();
            /**写入公共参数, 交易类型 IQPS006*/
            WriteCommonHeader(tmpMsg, PAB02TransType.P1988, applicationID);
            //系统流水号，规范：用户短号（6位）+日期（6位）+随机编号（10位）
            if (transSeq.length() >= 10) {
                transSeq = transSeq.substring(transSeq.length() - 10);
            } else {
                transSeq = "0000000000".substring(transSeq.length()) + transSeq;
            }
            String cnsmrSeqNo = userid + Format.Date6Format.format(p_req1988.getPayDateOnly()) + transSeq;
            tmpMsg.put("CnsmrSeqNo", cnsmrSeqNo);
            /*业务种类号 固定值 100157*/
            tmpMsg.put("BussTypeNo", "100157");
            /*签约账户*/
            tmpMsg.put("AcctNo", p_req1988.ownAct);
            /*收付类型  2-代付*/
            tmpMsg.put("InoutFlag", "2");
            /*代收付代码*/
            tmpMsg.put("CollectionCode", "00000");
            /*协议编号*/
            tmpMsg.put("AgreeNo", agreeNo);
            /*日期 yyyyDDdd*/
            tmpMsg.put("Date", trans8Date);
            /*顺序号*/
            tmpMsg.put("SerialNo", reqBatchNo);
            /*总笔数*/
            tmpMsg.put("TotalCount", p_req1988.totalNum);
            /*总金额*/
            tmpMsg.put("TotalAmt", p_req1988.totalAmt);
            /*文件名称*/
            tmpMsg.put("FileName", file.getName());
            /*授权标志*/
            /*提取码  上传时候返回的.*/
            if ("20190220".equals(Format.Date8Format.format(new Date()))) {
                tmpRet[1] = "883eca1e-03b0-4a26-b687-8ab296d2f8a5";
            }
            tmpMsg.put("DrawCode", tmpRet[1]);
            /*加密标志 固定送Y*/
            tmpMsg.put("EncryptFlag", "Y");
            /*解压码*/
            tmpMsg.put("UnzipCode", unzipCode);
            /*文件路径*/
            tmpMsg.put("FilePath", remoteFile);
            JSONObject jsonObject = new JSONObject(tmpMsg);
            jsonObject.put("RsaSign", getSign(tmpMsg));

            tmpRet = sendToBank(jsonObject.toJSONString(), StringHelper.trimEnd(serverUrl, "/") + "/BatchDsfFileDeal");
            if (tmpRet[0].length() == 0) {
                if (tmpRet[1].contains("{")) {
                    JSONObject paraMap = JSONObject.parseObject(tmpRet[1]);
                    if (null == paraMap.get("RsaSign") || verifySign(paraMap)) {
                        /*规范类报错会返回*/
                        String errorCode = paraMap.getString("errorCode");
                        String errorMsg = paraMap.getString("errorMsg");
                        if (errorCode == null && errorMsg == null) {
                            String retCode = paraMap.getString("TxnReturnCode");
                            String retMsg = paraMap.getString("TxnReturnMsg");
                            String retCnsmrSeqNo = paraMap.getString("CnsmrSeqNo");
                            if (cnsmrSeqNo.equals(retCnsmrSeqNo)) {
                                retAts.respInfo = retMsg;
                                retAts.respCode = "0";
                                retAts.transState = retCode;
                                retAts.payInfoCode = retCode;
                            } else {
                                retAts.respCode = "-1";
                                WriteBankLogLn("请求与返回的流水号不一致，请求流水号\r\n" + cnsmrSeqNo + "\r\n返回流水号\r\n" + retCnsmrSeqNo);
                                retAts.respInfo = "请求与返回的流水号不一致";
                            }
                        } else {
                            retAts.respInfo = errorMsg;
                            retAts.respCode = "0";
                            retAts.transState = errorCode;
                            retAts.payInfoCode = errorCode;
                        }
                    } else {
                        retAts.respCode = "-1";
                        retAts.respInfo = "验签失败";
                    }
                } else {
                    retAts.respCode = "-1";
                    retAts.respInfo = "返回报文格式错误，请检查返回报文";
                }
            } else {
                retAts.respCode = "-1";
                retAts.respInfo = tmpRet[1];
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            retAts.respCode = "-1";
            retAts.respInfo = ex.toString();
            WriteBankLogLn(ex);
        }
        retAts.writeRetToATS();
        return retAts;


    }


    @Override
    public RetAtsQryBatPayRec d_1998_QryBatPay(ReqQryBatPayRec p_req1998) throws Exception {
        RetAtsQryBatPayRec retAts = new RetAtsQryBatPayRec(p_req1998.reqHeader);
        String reqBatchNo = p_req1998.reqBatchNO;
        retAts.reqSeqID = reqBatchNo;
        String transSeq = p_req1998.reqHeader.transSeqID;
        try {
            String filename = "KHKF_BIB_87_" + Format.DateTimeWithoutYS.format(p_req1998.getBgnDateTime()) + "_" + reqBatchNo + ".RP";
            String zipName = filename + ".ZIP";

            /*------------------------------------------Step1 查询文件处理状态-------------------------------------*/
            /*提交银行URl*/
            String serverUrl = bankFront.getUrl("TransUrl");
            /*文件传输平台用户uid*/
            String userid = getBankConfig().getMapValueByKey("bankparam", "Userid");
            /*文件传输平台密码*/
            String passWord = getBankConfig().getMapValueByKey("bankparam", "PassWord");
            /*开放平台门户申请的AppAccessKey*/
            String applicationID = getBankConfig().getMapValueByKey("bankparam", "ApplicationID");
            /*协议编号*/
            String agreeNo = getBankConfig().getMapValueByKey("agreeNo", p_req1998.ownAct);
            passWord = ScrtUtil.decryptEsb(passWord.substring(7));
            Map<String, Object> tmpMsg = new TreeMap<String, Object>();
            /*写入公共参数, 交易类型 IQPS006*/
            WriteCommonHeader(tmpMsg, PAB02TransType.Q1988, applicationID);
            /*22位规则流水号*/
            if (transSeq.length() >= 10) {
                transSeq = transSeq.substring(transSeq.length() - 10);
            } else {
                transSeq = "0000000000".substring(transSeq.length()) + transSeq;
            }
            String cnsmrSeqNo = userid + Format.Date6Format.format(p_req1998.getBgnDateTime()) + transSeq;
            tmpMsg.put("CnsmrSeqNo", cnsmrSeqNo);
            /**/
            tmpMsg.put("Date", Format.Date8Format.format(p_req1998.getBgnDateTime()));
            /*顺序号*/
            tmpMsg.put("SerialNo", reqBatchNo);
            /*协议编号*/
            tmpMsg.put("CorpAgreementNo", agreeNo);
            /*文件类型   0-回盘文件 1-对账文件  2-差错文件 */
            tmpMsg.put("FileType", "0");
            JSONObject jsonObject = new JSONObject(tmpMsg);
            /*写入签名*/
            jsonObject.put("RsaSign", getSign(tmpMsg));
            /*发送银行*/
            String[] tmpRet = sendToBank(jsonObject.toJSONString(), StringHelper.trimEnd(serverUrl, "/") + "/BatchDealResultQuery");
            if (tmpRet[0].length() == 0) {
                if (tmpRet[1].contains("{")) {
                    JSONObject paraMap = JSONObject.parseObject(tmpRet[1]);
                    if (null == paraMap.get("RsaSign") || verifySign(paraMap)) {
                        /*规范类报错会返回*/
                        String errorCode = paraMap.getString("errorCode");
                        String errorMsg = paraMap.getString("errorMsg");
                        if (errorCode == null && errorMsg == null) {
                            String retCode = paraMap.getString("TxnReturnCode");
                            String retMsg = paraMap.getString("TxnReturnMsg");
                            String retCnsmrSeqNo = paraMap.getString("CnsmrSeqNo");
                            if (retCnsmrSeqNo==null||cnsmrSeqNo.equals(retCnsmrSeqNo)) {
                                retAts.respCode = "0";
                                /*通讯成功,查看文件处理进度*/
                                if ("000000".equals(retCode)) {
                                    /*处理状态  0-处理成功1-文件处理中,请稍后再查询结果2-整个批次失败,需要重新处理3-批次不存在,需要重新处理*/
                                    String retStatusCode = paraMap.getString("RetStatusCode");
                                    if ("3".equals(retStatusCode)) {
                                        /*批次不存在处理*/
                                        if (canBeNotExist(p_req1998, retAts, 30)) {
                                            retAts.respCode = "0";
                                            retAts.respInfo = "记录不存在!";
                                            retAts.transState = "E1302";
                                            retAts.payInfoCode = "E1302";
                                            retAts.writeAfterDetail();
                                            return retAts;
                                        }
                                    } else if ("2".equals(retStatusCode)) {
                                        /*批次处理失败*/
                                        String batErrorMsg = paraMap.getString("ErrorMsg");
                                        retAts.respInfo = retMsg+"+"+batErrorMsg;
                                        retAts.payInfoCode = retStatusCode + "+" + batErrorMsg;
                                        retAts.transState = retCode + "+" + retStatusCode;
                                    } else if ("0".equals(retStatusCode)) {
                                        /*处理完成*/
                                        /*提取码*/
                                        String drawCode = paraMap.getString("DrawCode");
                                        /*解压密码*/
                                        String unzipCode = paraMap.getString("UnzipCode");
                                        /*文件路径*/
                                        String remoteFilePath = paraMap.getString("FilePath");
                                        /*与文件是否已经下载*/
                                        String filePath = getDataFileDirectory(p_req1998.getBgnDateTime()) + File.separator+"download" +File.separator+ remoteFilePath.substring(remoteFilePath.lastIndexOf("/") + 1);
                                        File localZipFile = new File(filePath);
                                        if (!localZipFile.exists()) {
                                            /*------------------------------------------Step2  开始下载文件-------------------------------------*/
                                            FileMsgBean getFileBean = new FileMsgBean();
                                            // 创建处理的信息头，并设置相关初始化参数信息
                                            getFileBean.setFileName(remoteFilePath);
                                            getFileBean.setRemotePath(remoteFilePath);
                                            /*本地保存路径*/
                                            getFileBean.setLocalPath(filePath);
                                            getFileBean.setUid(userid);
                                            getFileBean.setPasswd(passWord);
                                            /*privateAuth  私密授权码，由文件上传方提供*/
                                            getFileBean.setPrivateAuth(drawCode);
                                            getFileBean.setAppID(applicationID);
                                            getFileBean.setToken(getToken(applicationID)[1]);
                                            getFileBean.setFileServerUrl(bankFront.getUrl("FileServerUrl"));
                                            /*下载文件*/
                                            tmpRet = getFileFromServer(getFileBean);
                                            /*如果token过期*/
                                            if (tmpRet[1].startsWith("EFS0052")) {
                                                String tokenPath = getCfgDirectory() + File.separator + applicationID + ".txt";
                                                FileHelper.deleteFileIfExists(tokenPath);
                                                getFileBean.setToken(getToken(applicationID)[1]);
                                                tmpRet = getFileFromServer(getFileBean);
                                            }
                                        }else {
                                            tmpRet[0] = "";
                                        }

                                        if (tmpRet[0].length() == 0) {
                                            if (localZipFile.exists()) {
                                              File  localFile = new File(filePath.substring(0, filePath.lastIndexOf(".")));
                                                if (!localFile.exists()) {
                                                    try {
                                                        /*解压文件*/
                                                        ZipHelper.unZipWithPwd(localZipFile, null, unzipCode, "UTF-8");
                                                    } catch (Exception e) {
                                                        retAts.respCode = "-1";
                                                        retAts.respInfo = "解压回盘文件失败，请查看日志";
                                                        WriteBankLogLn("解压回盘文件" + localZipFile.getAbsoluteFile() + "失败", e);
                                                        return retAts;
                                                    }
                                                }

                                                if (localFile.exists()) {
                                                    /*读取文件内容*/
                                                    String content = FileHelper.readToString(localFile, getCharset());
                                                    WriteBankLogLn("回盘文件内容\r\n" + content);
                                                    if (content != null && content.length() > 0) {
                                                        /*换行符  \r\n  分隔符 “|::|”*/
                                                        if (content.contains("|::|")) {
                                                            String[] lines = content.split("\r\n");
                                                            String ownAct = lines[0].split("\\|::\\|", -1)[26];
                                                            retAts.writeBeforeDetail();
                                                            for (int x = 1; x < lines.length; x++) {
                                                                String line = lines[x];
                                                                String[] details = line.split("\\|::\\|", -1);
                                                                RetAtsBatPayRecDetail retDetail = new RetAtsBatPayRecDetail();
                                                                /*明细序号，送盘文件中“商户订单号”原值返回*/
                                                                retDetail.postScript = details[0];
                                                                retDetail.payAct = ownAct;
                                                                /*银行账号*/
                                                                retDetail.recAct = details[2];
                                                                /*户名*/
                                                                retDetail.recName = details[4];
                                                                /*交易金额*/
                                                                retDetail.payAmount = details[6];
                                                                /*处理结果  0000：交易成功 9001：不明确 其它：交易失败 详见：“附录A（交易状态）”*/
                                                                retDetail.result = retCode + "+" + details[19];
                                                                /*结果描述*/
                                                                retDetail.memo = details[20];
                                                                retDetail.payInfoCode = retDetail.result;
                                                                retAts.writeRetDetail(retDetail);
                                                            }
                                                        } else {
                                                            retAts.respInfo = content;
                                                            retAts.payInfoCode = retCode + "+" + content;
                                                            retAts.transState = retCode + "+" + content;
                                                        }
                                                    } else {
                                                        retAts.respCode = "-1";
                                                        retAts.respInfo = "返回文件结果为空，请查看日志" + filePath;
                                                        WriteBankLogLn("返回文件" + filePath + "结果为空，请检查文件");
                                                    }
                                                } else {
                                                    retAts.respCode = "-1";
                                                    retAts.respInfo = "解压后文件不存在，请查看日志";
                                                    WriteBankLogLn("解压后文件" + localZipFile.getAbsolutePath() + "不存在");
                                                }
                                            } else {
                                                retAts.respCode = "-1";
                                                retAts.respInfo = "下载文件不存在：" + filePath;
                                            }
                                        } else {
                                            retAts.respCode = "-1";
                                            retAts.respInfo = "文件下载失败：" + tmpRet[1];
                                        }
                                    } else if ("1".equals(retStatusCode)) {
                                        /*处理中*/
                                        retAts.respInfo = "文件处理中,请稍后再查询结果";
                                        retAts.payInfoCode = retCode + "+" + retStatusCode;
                                        retAts.transState = retCode + "+" + retStatusCode;
                                    } else {
                                        /*未知处理状态*/
                                        retAts.respInfo = "未知处理状态,请联系银行";
                                        retAts.payInfoCode = retCode + "+" + retStatusCode;
                                        retAts.transState = retCode + "+" + retStatusCode;
                                    }
                                } else {
                                    retAts.respInfo = retMsg;
                                    retAts.payInfoCode = retCode;
                                    retAts.transState = retCode;
                                }
                            } else {
                                retAts.respCode = "-1";
                                WriteBankLogLn("请求与返回的流水号不一致，请求流水号\r\n" + cnsmrSeqNo + "\r\n返回流水号\r\n" + retCnsmrSeqNo);
                                retAts.respInfo = "请求与返回的流水号不一致";
                            }


                        } else {
                            retAts.respInfo = errorMsg;
                            retAts.respCode = "0";
                            retAts.transState = errorCode;
                            retAts.payInfoCode = errorCode;
                        }
                    } else {
                        retAts.respCode = "-1";
                        retAts.respInfo = "验签失败";
                    }
                } else {
                    retAts.respCode = "-1";
                    retAts.respInfo = "返回报文格式错误，请检查返回报文";
                }
            } else {
                retAts.respCode = "-1";
                retAts.respInfo = tmpRet[1];
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            retAts.respCode = "-1";
            retAts.respInfo = ex.getMessage();
            WriteBankLogLn(ex);
        }

        retAts.writeAfterDetail();
        return retAts;
    }

    @Override
    public RetAtsBatPayRec d_9188_BatPay(ReqBatPayRec p_req9188) throws Exception {
        return null;
    }

    @Override
    public RetAtsQryBatPayRec d_9198_QryBatPay(ReqQryBatPayRec p_req9198) throws Exception {
        return null;
    }
}
